package com.altran.web.forms;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.altran.web.utilities.Utilities;

public class FormularioVistaConsultor {
	private Date fechaInicialFilter;
	private Date fechaFinalFilter;
	private int idConsultor;
	private int idConcepto;
	private int porcentajeOcupacion;
	private Date fechaInicialDedicacion;
	private Date fechaFinalDedicacion;
	
	private List<String> mensajesError;
	
	public FormularioVistaConsultor(HttpServletRequest request) {
		mensajesError = new ArrayList<String>();
		copiarParametros(request);
		validarAtributos(request);
	}
	
	private void copiarParametros(HttpServletRequest request) {
		idConcepto = (request.getParameter("idConcepto") == null) ? 0 : Integer.parseInt(request.getParameter("idConcepto"));
		try { 
			idConsultor = (request.getParameter("idConsultor") == null) ? 0 : Integer.parseInt(request.getParameter("idConsultor"));
		}
		catch( NumberFormatException exc) { idConsultor = 0; }
		try {
			porcentajeOcupacion = (request.getParameter("ocupacion") == null) ? 0 : Integer.parseInt(request.getParameter("ocupacion"));
		}catch (NumberFormatException exc) { porcentajeOcupacion = 0; }
		
		String fechaFinalDedicacion = 
				((request.getParameter("fechaFinalDedicacion") == null) || (request.getParameter("fechaFinalDedicacion") == "")) ? "" : request.getParameter("fechaFinalDedicacion");
		
		if (!fechaFinalDedicacion.isEmpty()) {
			
			try {
				SimpleDateFormat Sfmt = new SimpleDateFormat("yyyy-MM-dd");
				Date dtFinalDed = Sfmt.parse(fechaFinalDedicacion);
				setFechaFinalDedicacion(dtFinalDed);
			} catch (ParseException exc) {
				mensajesError.add("La fecha final de la dedicación no es válida");
			}
			
		}
			
		try {
			//TODO Insertar fecha por defecto si la referencia viene a nula
			SimpleDateFormat Sfmt = new SimpleDateFormat("yyyy-MM-dd");
			Date dtInicial = Sfmt.parse(
					(request.getParameter("fechaInicial")) == null ? "2013-02-01" : request.getParameter("fechaInicial"));
			Date dtFinal = Sfmt.parse(
					(request.getParameter("fechaFinal")) == null ? "2013-02-01" : request.getParameter("fechaFinal"));				
			Date dtInicialDed = Sfmt.parse(
					(request.getParameter("fechaInicialDedicacion")) == null ? "2013-02-01" : request.getParameter("fechaInicialDedicacion"));

			Sfmt.setLenient(false);
			setFechaInicialFilter(dtInicial);
			setFechaFinalFilter(dtFinal);
			setFechaInicialDedicacion(dtInicialDed);
		} catch (ParseException exc) {}
	}
	
	private void validarAtributos(HttpServletRequest request) {
		
		/*Validamos los datos para el filtrado de dedicaciones mediante fechas*/
			/*Nos han pulsado el botón de filtrado de fechas*/
			if (request.getParameter("buscar") != null) { 
				if (getFechaInicialFilter().after(getFechaFinalFilter())) 
					mensajesError.add("La fecha final no puede ser anterior a la fecha inicial");
				if (Utilities.obtenerNumDiasEntreFechas(fechaInicialFilter, fechaFinalFilter) > 31)
					mensajesError.add("El filtrado NO debe sobrepasar el mes");
			}
			if (request.getParameter("creardedicacacion") != null) {
				if (getFechaInicialDedicacion().after(getFechaFinalDedicacion())) {
					mensajesError.add("La fecha final no puede ser anterior a la fecha inicial");
				}
				if (porcentajeOcupacion <= 0)
					mensajesError.add("La ocupación debe ser mayor a 0");
				if (idConsultor == 0) {
					//No se ha enviado el id del consultor. Posible hacking o error de la aplicacion. Mostramos error general
					mensajesError.add("Error general. Intentelo de nuevo");
				}
				
			}
		
	}
	
	public int getIdConsultor() {
		return idConsultor;
	}

	public void setIdConsultor(int idConsultor) {
		this.idConsultor = idConsultor;
	}

	public Date getFechaInicialFilter() {
		return fechaInicialFilter;
	}

	public void setFechaInicialFilter(Date fechaInicialFilter) {
		this.fechaInicialFilter = fechaInicialFilter;
	}

	public Date getFechaFinalFilter() {
		return fechaFinalFilter;
	}

	public void setFechaFinalFilter(Date fechaFinalFilter) {
		this.fechaFinalFilter = fechaFinalFilter;
	}

	public int getIdConcepto() {
		return idConcepto;
	}

	public void setIdConcepto(int idConcepto) {
		this.idConcepto = idConcepto;
	}

	public int getPorcentajeOcupacion() {
		return porcentajeOcupacion;
	}

	public void setPorcentajeOcupacion(int porcentajeOcupacion) {
		this.porcentajeOcupacion = porcentajeOcupacion;
	}

	public Date getFechaInicialDedicacion() {
		return fechaInicialDedicacion;
	}

	public void setFechaInicialDedicacion(Date fechaInicialDedicacion) {
		this.fechaInicialDedicacion = fechaInicialDedicacion;
	}

	public Date getFechaFinalDedicacion() {
		return fechaFinalDedicacion;
	}

	public void setFechaFinalDedicacion(Date fechaFinalDedicacion) {
		this.fechaFinalDedicacion = fechaFinalDedicacion;
	}

	public List<String> getMensajesError() {
		return mensajesError;
	}
	public void setMensajesError(List<String> mensajesError) {
		this.mensajesError = mensajesError;
	}
	
}
